<?php
require_once "common.php";
include("core.php");

if(OPENID_ENABLED==FALSE) { echo("Inactif"); exit(0); } //Quitte si OpenID désactivé.
session_start();

	//Inclusion de la classe cache
	initclass("cache");
	$cache=new Cache();
	
	//Récupération du cookie
	$id=$_COOKIE['gzid'];
	
	//Si l'ID n'existe pas, on bloque
	if(!$cache->is_id($id)){
		echo("Le jeton d'identification est faux.");
		exit(0);
	}
	
	//Récupération du hash correspondant
	$hash=$cache->get($id,"server");
	
	//Si le hash est vide, on arrête
	if(empty($hash)){ exit(0); }
	


function escape($thing) {
    return htmlentities($thing);
}


    $consumer = getConsumer();

    // Complete the authentication process using the server's
    // response.
    $return_to = getReturnTo();
    $response = $consumer->complete($return_to);

    // Check the response status.
    if ($response->status == Auth_OpenID_CANCEL) {
        // This means the authentication was cancelled.
		echo("annulé");
		exit(0);
    } else if ($response->status == Auth_OpenID_FAILURE) {
        // Authentication failed; display the error message.
	echo("erreur");
        exit(0);
    } else if ($response->status == Auth_OpenID_SUCCESS) {
        // This means the authentication succeeded; extract the
        // identity URL and Simple Registration data (if it was
        // returned).
        $openid = $response->getDisplayIdentifier();
        $esc_identity = escape($openid);


        $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($response);

        $sreg = $sreg_resp->contents();
	if( (empty($sreg['nickname'])) OR (empty($sreg['fullname'])) OR (empty($sreg['email']))){
		echo("Votre fournisseur OpenID ne nous a pas communiqué les informations que nous lui demandions. Nous tenterons de corriger ce problème");
		exit(0);
	}

	//Ajout des données à la base de données
	initclass("openid");
	$oid=new OpenID();
	
	$oid->add($esc_identity,$sreg['nickname'],$sreg['fullname'],$sreg['email']);
	$login="openid:".$esc_identity;

	//Création du checksum des informations renvoyés au serveur demandeur par l'intermédiaire du client
	$id=$_COOKIE['gzid'];
	$checksum=sha1($hash.$login);
	
	//Suppression du hash de la base
	$cache->del($id,"server");
	
	//Lecture de l'adresse retour passée en cookie
	$return=$_COOKIE['return'];
	
	//Création de l'URL de retour
	$url=$return."?login=".$login."&checksum=".$checksum."&id=".$id;
	
	//Redirection
	header("Location: ".$url);
    }
?>
